#include <iostream>

using namespace std;
//类模板中成员函数创建时机
//类模板中成员函数和普通类中成员函数创建时机是有区别的：
//1、普通类中的成员函数一开始就可以创建
//2、类模板中的成员函数在调用时才创建

class Person1{
public:
    void showPerson1(){
        cout<<"show Person1"<<endl;
    }
};
class Person2{
public:
    void showPerson2(){
        cout<<"show Person2"<<endl;
    }
};

template<typename T>
class MyClass{
public:
    T o;
    //类模板中的成员函数，并不是一开始就创建的，而是在模板调用时再生成
    void func1(){
        o.showPerson1();
    }
    void func2(){
        o.showPerson2();
    }
};

void test(){
    MyClass<Person1> m;
    m.func1();
    //m.func2();//编译会出错，说明函数调用才会去创建成员函数
}
int main() {
    test();
    return 0;
}